// JS 对象序列化 a=1&b=2
export function objectToQueryString(obj) {
	return Object.keys(obj)
		.map((key) => {
			return `${key}=${obj[key]}`;
		})
		.join("&");
}

// 返回上一级
export function navigateBack() {
	const pages = getCurrentPages();
	// 没有上一级
	if (pages.length <= 1) {
		uni.reLaunch({
			url: "/pages/my/my",
		});
	} else {
		uni.navigateBack({
			delta: 1,
		});
	}
}
/**
 * js计算 解决丢失精度
 */

//加
export function floatAdd(arg1, arg2) {
	var r1, r2, m;
	try {
		r1 = arg1.toString().split(".")[1].length;
	} catch (e) {
		r1 = 0;
	}
	try {
		r2 = arg2.toString().split(".")[1].length;
	} catch (e) {
		r2 = 0;
	}
	m = Math.pow(10, Math.max(r1, r2));
	return (arg1 * m + arg2 * m) / m;
}
//减
export function floatSub(arg1, arg2) {
	var r1, r2, m, n;
	try {
		r1 = arg1.toString().split(".")[1].length;
	} catch (e) {
		r1 = 0;
	}
	try {
		r2 = arg2.toString().split(".")[1].length;
	} catch (e) {
		r2 = 0;
	}
	m = Math.pow(10, Math.max(r1, r2));
	//动态控制精度长度
	n = r1 >= r2 ? r1 : r2;
	return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
//乘
export function floatMul(arg1, arg2) {
	var m = 0,
		s1 = arg1.toString(),
		s2 = arg2.toString();
	try {
		m += s1.split(".")[1].length;
	} catch (e) {}
	try {
		m += s2.split(".")[1].length;
	} catch (e) {}
	return (
		(Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
		Math.pow(10, m)
	);
}
//除
export function floatDiv(arg1, arg2) {
	var t1 = 0,
		t2 = 0,
		r1,
		r2;
	try {
		t1 = arg1.toString().split(".")[1].length;
	} catch (e) {}
	try {
		t2 = arg2.toString().split(".")[1].length;
	} catch (e) {}
	r1 = Number(arg1.toString().replace(".", ""));
	r2 = Number(arg2.toString().replace(".", ""));
	return (r1 / r2) * Math.pow(10, t2 - t1);
}

// 格式化时间
export function formatDouyinTime(dateString) {
	// 辅助函数：补零
	const padZero = (num) => num.toString().padStart(2, "0");

	// 解析输入时间（支持ISO格式、时间戳等）
	const inputDate = new Date(dateString);
	const now = new Date();

	// 计算时间差（毫秒）
	const diffMs = now - inputDate;
	const diffSec = Math.floor(diffMs / 1000);
	const diffMin = Math.floor(diffSec / 60);
	const diffHour = Math.floor(diffMin / 60);

	// 今天起始时间（本地时区午夜）
	const todayStart = new Date();
	todayStart.setHours(0, 0, 0, 0);

	// 昨天起始时间
	const yesterdayStart = new Date(todayStart);
	yesterdayStart.setDate(yesterdayStart.getDate() - 1);

	// 检查时间范围
	if (diffMin < 1) {
		return "刚刚";
	} else if (diffHour < 1) {
		return `${diffMin}分钟前`;
	} else if (inputDate >= todayStart) {
		return `今天 ${padZero(inputDate.getHours())}:${padZero(
      inputDate.getMinutes()
    )}`;
	} else if (inputDate >= yesterdayStart) {
		return `昨天 ${padZero(inputDate.getHours())}:${padZero(
      inputDate.getMinutes()
    )}`;
	} else if (inputDate.getFullYear() === now.getFullYear()) {
		return `${padZero(inputDate.getMonth() + 1)}-${padZero(
      inputDate.getDate()
    )} ${padZero(inputDate.getHours())}:${padZero(inputDate.getMinutes())}`;
	} else {
		return `${inputDate.getFullYear()}-${padZero(
      inputDate.getMonth() + 1
    )}-${padZero(inputDate.getDate())}`;
	}
}

/**
 * HEX 转 RGBA
 * @param {string} hex - HEX 色值（如 "#5686ff" 或 "#58f"）
 * @param {number} [alpha=1] - 透明度（0~1）
 * @returns {string} RGBA 色值（如 "rgba(86, 134, 255, 0.7)"）
 */
export function hexToRgba(hex, alpha = 1) {
	console.log('111', hex)
  // 去除 # 号
  let hexValue = hex.replace('#', '');
 
  // 处理 3 位 HEX（如 #58f → #5588ff）
  if (hexValue.length === 3) {
    hexValue = hexValue
      .split('')
      .map(c => c + c)
      .join('');
  }
 
  // 检查是否为有效的 6 位 HEX
  if (hexValue.length !== 6 || !/^[0-9a-fA-F]+$/.test(hexValue)) {
    throw new Error('Invalid HEX color format');
  }
 
  // 解析 R、G、B
  const r = parseInt(hexValue.substring(0, 2), 16);
  const g = parseInt(hexValue.substring(2, 4), 16);
  const b = parseInt(hexValue.substring(4, 6), 16);
 
  // 返回 RGBA 字符串
  return `rgba(${r}, ${g}, ${b}, ${alpha})`;
}

export function amountSplit(amount) {
	amount = amount.toString();
	const parts = amount.split(".");
	const intPart = parts[0];
	const decimaPart = parts[1];
	return {
		intPart,
		decimaPart,
	};
}

/**
 * 时间格式化函数
 * @param {Date|string|number} time - 时间参数（支持Date对象、时间戳、ISO格式字符串）
 * @returns {Object} 包含多种日期格式的JSON对象
 */
export function formatTime(time) {
	// 创建Date对象
	let date;
	if (time instanceof Date) {
		date = time;
	} else if (typeof time === "number" || /^\d+$/.test(time)) {
		date = new Date(Number(time));
	} else {
		date = new Date(time);
	}

	// 校验日期有效性
	if (isNaN(date.getTime())) {
		throw new Error("Invalid date input");
	}

	// 日期组件
	const year = date.getFullYear();
	const month = date.getMonth() + 1;
	const day = date.getDate();
	const hours = date.getHours();
	const minutes = date.getMinutes();
	const seconds = date.getSeconds();
	const milliseconds = date.getMilliseconds();
	const dayOfWeek = date.getDay();

	// 星期映射
	const weekdays = ["日", "一", "二", "三", "四", "五", "六"];

	// 补零函数
	const padZero = (num) => num.toString().padStart(2, "0");

	// 12小时制转换
	const period = hours >= 12 ? "PM" : "AM";
	const hours12 = hours % 12 || 12;

	return {
		date: `${year}-${padZero(month)}-${padZero(day)}`, // 标准日期格式 2025-05-28
		dateSlash: `${year}/${padZero(month)}/${padZero(day)}`, // 标准日期格式 2025/05/28
		dateCN: `${year}年${month}月${day}日`, // 中文日期 2025年5月28日
		time: `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`, // 时间 10:30:15
		time12: `${hours12}:${padZero(minutes)}:${padZero(seconds)} ${period}`, // 12小时制时间 10:30:15 AM
		dateTime: `${year}-${padZero(month)}-${padZero(day)} ${padZero(
      hours
    )}:${padZero(minutes)}:${padZero(seconds)}`, // 完整日期时间
		iso: date.toISOString(), // ISO格式 2025-05-28T02:30:15.000Z
		timestamp: date.getTime(), // 时间戳 1745793015000
		year,
		month,
		day,
		hours,
		minutes,
		seconds,
		milliseconds, // 日期组件
		weekday: `星期${weekdays[dayOfWeek]}`, // 星期 星期三
		weekdayIndex: dayOfWeek, // 星期索引 (0-6)
		dayOfYear: Math.floor((date - new Date(year, 0, 0)) / 86400000), // 年内第几天
	};

	// 使用示例
	// console.log(formatTime(new Date()));
	/*
	输出：
	{
	  date: "2025-05-28",
	  dateCN: "2025年5月28日",
	  time: "10:30:15",
	  time12: "10:30:15 AM",
	  dateTime: "2025-05-28 10:30:15",
	  iso: "2025-05-28T02:30:15.000Z",
	  timestamp: 1745793015000,
	  year: 2025,
	  month: 5,
	  day: 28,
	  hours: 10,
	  minutes: 30,
	  seconds: 15,
	  milliseconds: 0,
	  weekday: "星期三",
	  weekdayIndex: 3,
	  dayOfYear: 148
	}
	*/
}

/**
 * 拆分金额为整数和小数部分
 * @param {number|string} amount - 金额（数字或字符串）
 * @returns {Object} 包含整数部分和小数部分的对象
 */
export function splitAmount(amount) {
	// 转换为字符串并去除首尾空格
	let amountStr =
		typeof amount === "number" ? amount.toString() : amount.trim();

	// 处理空字符串情况
	if (amountStr === "") {
		return {
			integer: "0",
			decimal: "00"
		};
	}

	// 处理负号标记
	let hasNegative = amountStr.startsWith("-");
	if (hasNegative) {
		amountStr = amountStr.substring(1); // 移除负号
		if (amountStr === "") return {
			integer: "0",
			decimal: "00"
		}; // 单独负号情况
	}

	// 分割整数和小数部分
	const parts = amountStr.split(".");
	let integerPart = parts[0] || "0"; // 整数部分（为空时设为0）
	let decimalPart = parts[1] || ""; // 小数部分

	// 处理负号
	if (hasNegative) {
		integerPart = "-" + integerPart;
	}

	// 小数部分处理：截取前两位，不足补零
	decimalPart = decimalPart.substring(0, 2).padEnd(2, "0");

	// 特殊处理纯负零情况（如 "-0", "-0.00"）
	if (integerPart === "-0" && decimalPart === "00") {
		integerPart = "0";
	}

	return {
		integer: integerPart,
		decimal: decimalPart,
	};
}

// 获取当前日期

export function getCurrentDate() {
	const now = new Date()
	const year = now.getFullYear()
	const month = (now.getMonth() + 1).toString().padStart(2, '0')
	const day = now.getDate().toString().padStart(2, '0')
	return `${year}-${month}-${day}`
}